package com.chentf.creational.Singleton.code;

/**
 * 懒汉式
 * 顾名思义就是实例在用到的时候才去创建，“比较懒”，用的时候才去检查有没有实例，如果有则返回，没有则新建。
 * 有线程安全和线程不安全两种写法，区别就是synchronized关键字。
 */
public class LHanDanli {

    //定义一个私有类变量来存放单例，私有的目的是指外部无法直接获取这个变量，而要使用提供的公共方法来获取
    private static LHanDanli instance = null;

    //定义私有构造器，表示只在类内部使用，亦指单例的实例只能在单例类内部创建
    private LHanDanli(){}

    //定义一个公共的公开的方法来返回该类的实例，由于是懒汉式，需要在第一次使用时生成实例，所以为了线程安全，使用synchronized关键字来确保只会生成单例
    public static synchronized LHanDanli getInstance(){
        if(instance == null){
            instance = new LHanDanli();
        }
        return instance;
    }
}
